//
//  DDmediaPlayer.m
//  IOS 音频 音乐 视频播放器
//
//  Created by rimi on 16/9/7.
//  Copyright © 2016年 rimi. All rights reserved.
//

#import "DDmediaPlayer.h"

@implementation DDmediaPlayer
#pragma mark 创建媒体播放单例实例
+ (instancetype)shareDDmediaPlayer{
    static DDmediaPlayer* player;//创建一个单例类指针
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        player = [[DDmediaPlayer alloc]init];//初始化实例对象并返回

    });
    return player;
}


#pragma mark 播放音频的方法
//音频如系统开机声音，很短的声音，能让手机振动。
- (void)soundPlayerWithName:(NSString*)soundName{
  
//1，根据音频名称在本地路径获得路径
    NSString* soundPath = [[NSBundle mainBundle]pathForResource:soundName ofType:nil];
    NSLog(@"%@",soundPath);
    /*
     该方法是在该项目中存在的音频通过名字去找到音频本地路径，如果是要找没在该项目的音频在本地上的音频直接把它拖进来就有一个音频本地的路径。而不用[NSBundle mainBundle]方法。
     参数1:音频的名字
     参数2：音频的格式，由于音频格式很多样，因此在参数1填写音频的全路径，第二个参数填nil即可
     
     */
    
//2，准备播放环境
    NSURL* url = [NSURL fileURLWithPath:soundPath];//音效只能在本地播放。将本地路径转换为URL对象。
    SystemSoundID soundId = 0;   //系统id
    AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundId);
    
    
//3，开始播放
    AudioServicesPlayAlertSound(soundId);//系统默认的
    AudioServicesPlaySystemSound(soundId);//带震动效果的
    
    
//ios 9.0以后的新方法，带有播放完成回调 9.0的系统才能使用下面两个方法 如果低于9.0会出问题，在使用前最好判断一下当前的版本
    AudioServicesPlayAlertSoundWithCompletion(soundId, ^{
        NSLog(@"播放完成");
    });
    
    AudioServicesPlaySystemSoundWithCompletion(soundId, ^{
        NSLog(@"播放完成");
    });
    
    
    

}

#pragma mark 播放本地音乐的方法
- (void)nativePlacemusicPlayerWithName:(NSString *)musicName beginTime:(CGFloat)beginTime{

    /*
     使用该方法获取本地音乐的路径
     大多音乐都是mp3结尾所以可以在第二个参数填写mp3
     */
#pragma mark 需要对本地歌曲的路径进行判断，如果本地没有的话就不能播放，如果不判断系统会崩溃
    if (!musicName) {
        //提示用户 你播放的歌曲找不到
        return;
    }
// 2，初始化播放对象
    NSURL* url = [NSURL fileURLWithPath:musicName];//将路径转为url对象

    self.audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
//3， 准备播放
    [self.audioPlayer prepareToPlay];
    
//播放音量
    self.audioPlayer.volume = 1.0;//0-1的取值范围
//循环播放
    self.audioPlayer.numberOfLoops = -1;
    /*
     numberOfLoops -1 单曲循环
     numberOfLoops  0 单曲播放一次
     numberOfLoops >0 循环numberOfLoops次
     */
    self.audioPlayer.currentTime = beginTime;
//播放
    [self.audioPlayer play];


}

#pragma mark  网络歌曲播放的方法
- (void)networkMusicPlayerWithUrl:(NSString *)musicUrlString{
    NSURL* url = [NSURL URLWithString:musicUrlString];//把获得的url字符串转成url对象

//判断当前地址是否正确
    if (!url) {
        return;
    }
//初始化播放对象
    AVPlayerItem* item = [AVPlayerItem playerItemWithURL:url];
//初始化播放歌曲
    self.networkPlaer = [AVPlayer playerWithPlayerItem:item];
    
//    self.networkPlaer = [AVPlayer playerWithURL:url];这种也能播放歌曲 但是networkPlaer可用属性少 不能对歌曲进行很好的操作
//    [self.networkPlaer seekToTime:CMTimeMake(100, 1)];控制歌曲从哪开始播放的方法
    
    
// 播放
    [self.networkPlaer play];
}
#pragma mark 震动的方法
- (void)shake{
    SystemSoundID soundID = kSystemSoundID_Vibrate;
    AudioServicesPlaySystemSound(soundID);
    
    
    
}

@end
